# pyechars 入门
# # 基础折线图
# # 导包，导入line功能构建折线图对象
# from pyecharts.charts import Line
# from pyecharts.options import TitleOpts, ToolboxOpts, LegendOpts, VisualMapOpts
#
# # 得到折线图对象
# line = Line()
# # 添加x轴数据
# line.add_xaxis(['中国','美国','英国'])
# # 添加y轴数据
# line.add_yaxis('GDP',[30,20,10])
#
# # 设置全局配置项set_globol_opts来设置
# line.set_global_opts(
#     # 标题
#     title_opts=TitleOpts(title='GDP展示',pos_left='center',pos_bottom='1%'),
#     # 图例
#     legend_opts=LegendOpts(is_show=True),
#     # 工具箱
#     toolbox_opts=ToolboxOpts(is_show=True),
#     # 视觉映射
#     visualmap_opts=VisualMapOpts(is_show=True),
# )
#
# # 生成图表
# line.render()
import json



# import json
# from pyecharts.charts import Line
# from pyecharts.options import TitleOpts, ToolboxOpts, LegendOpts, VisualMapOpts,LabelOpts
#
# # 折线图练习
#
# # 处理数据
# f_us = open('E:/PyProject/资料/第1-12章资料/资料/可视化案例数据/折线图数据/美国.txt','r',encoding='utf-8')
# f_jp = open('E:/PyProject/资料/第1-12章资料/资料/可视化案例数据/折线图数据/日本.txt','r',encoding='utf-8')
# f_in = open('E:/PyProject/资料/第1-12章资料/资料/可视化案例数据/折线图数据/印度.txt','r',encoding='utf-8')
#
# # 美国
# us_data = f_us.read()
# us_data = us_data.replace('jsonp_1629344292311_69436(','')
# us_data = us_data[:-2]
# # 日本
# jp_data = f_jp.read()
# jp_data = jp_data.replace('jsonp_1629350871167_29498(','')
# jp_data = jp_data[:-2]
# #印度
# in_data = f_in.read()
# in_data = in_data.replace('jsonp_1629350745930_63180(','')
# in_data = in_data[:-2]
#
# # 将json数据转换为python数据
# us_dict = json.loads(us_data)
# jp_dict = json.loads(jp_data)
# in_dict = json.loads(in_data)
# # 获取trend key
# us_trend_data = us_dict['data'][0]['trend']
# jp_trend_data = jp_dict['data'][0]['trend']
# in_trend_data = in_dict['data'][0]['trend']
#
# # 获取日期数据，用于x轴
# us_x_data = us_trend_data['updateDate'][:314]
# jp_x_data = jp_trend_data['updateDate'][:314]
# in_x_data = in_trend_data['updateDate'][:314]
#
# # 获取确认数据，用于y轴
# us_y_date = us_trend_data['list'][0]['data'][:314]
# jp_y_date = jp_trend_data['list'][0]['data'][:314]
# in_y_date = in_trend_data['list'][0]['data'][:314]
#
# # 得到折线图对象
# line = Line()
# # 添加x轴数据
# line.add_xaxis(us_x_data)
# # 添加y轴数据
# line.add_yaxis('美国确诊人数',us_y_date,label_opts=LabelOpts(is_show=False))
# line.add_yaxis('日本确诊人数',jp_y_date,label_opts=LabelOpts(is_show=False))
# line.add_yaxis('印度确诊人数',in_y_date,label_opts=LabelOpts(is_show=False))
#
# # 设置全局配置项set_globol_opts来设置
# line.set_global_opts(
#     # 标题
#     title_opts=TitleOpts(title='2022年美日印疫情确诊数据',pos_left='center',pos_bottom='1%'),
#
# )
#
# # 生成图表
# line.render()
# # 关闭文件对象
# f_us.close()
# f_jp.close()
# f_in.close()



# # map 基础地图演示
# from pyecharts.charts import Map
# from pyecharts.options import VisualMapOpts
#
# # 添加地图对象
# map = Map()
# # 准备数据
# data = [
#     ('北京市',99),
#     ('上海市',199),
#     ('湖南省',299),
#     ('台湾省',399),
#     ('广东省',499)
# ]
# # 添加数据
# map.add('测试地图',data,'china')
#
# # 设置全局选项
# map.set_global_opts(
#     visualmap_opts=VisualMapOpts(
#         is_show=True,   # 是否显示颜色
#         is_piecewise=True, # 开启手动校准范围
#         pieces=[
#             {'min':1,'max':199,"label":"1-9",'color':'green'},
#             {'min':199,'max':299,"label":"199-29",'color':'yellow'},
#             {'min':299,'max':499,"label":"299-499",'color':'red'},
#         ]
#     )
# )
# # 绘图
# map.render()



# # 全国疫情可视化地图开发
# import json
# from pyecharts.charts import Map
# from pyecharts.options import TitleOpts, VisualMapOpts
#
# # 读取数据文件
# f = open('E:/PyProject/资料/第1-12章资料/资料/可视化案例数据/地图数据/疫情.txt','r',encoding='utf-8')
# data = f.read()
# # 关闭文件
# f.close()
#
# # 取各省数据
# # 将字符串json转换为python的字典
# data_dict = json.loads(data)
# # 从字典中取出省份的数据
# province_data_list = data_dict['areaTree'][0]['children']
# # 组装哥哥剩饭和确诊人数为元组，并将各个省的数据都封装入列表内
# data_list = []
# for province_data in province_data_list:
#     province_name = province_data['name'] # 省份名称
#     province_confirm = province_data['total']['confirm'] # 确诊人数
#     data_list.append((province_name,province_confirm))
#
# # 创建地图
# map = Map()
# # 添加数据
# map.add('各省份确诊人数',data_list,'china')
# # 全局配置
# map.set_global_opts(
#     title_opts=TitleOpts(title='全国疫情地图'),
#     visualmap_opts=VisualMapOpts(
#         is_show=True,
#         is_piecewise=True,
#         pieces=[
#             {'min': 0, 'max': 100,'lable':'0~100','color':'white'},
#             {'min': 100, 'max': 1000,'lable':'0~100','color':'green'},
#             {'min': 1000, 'max': 10000,'lable':'0~100','color':'yellow'},
#             {'min': 10000, 'max': 100000,'lable':'0~100','color':'red'},
#
#         ]
#     )
# )
# map.render('全国疫情数据地图.html')


# # 河南省疫情可视化地图开发
# import json
# from pyecharts.charts import Map
# from pyecharts.options import TitleOpts, VisualMapOpts
#
# # 读取数据文件
# f = open('E:/PyProject/资料/第1-12章资料/资料/可视化案例数据/地图数据/疫情.txt','r',encoding='utf-8')
# data = f.read()
# # 关闭文件
# f.close()
#
# # 取河南省数据
# # 将字符串json转换为python的字典
# data_dict = json.loads(data)
# # 从字典中取出河南省的数据
# city_data_list = data_dict['areaTree'][0]['children'][3]['children']
# # 组装哥哥剩饭和确诊人数为元组，并将各个省的数据都封装入列表内
# data_list = []
# for city_data in city_data_list:
#     city_name = city_data['name'] + '市' # 各市的数据名
#     city_confirm = city_data['total']['confirm'] # 确诊人数
#     data_list.append((city_name,city_confirm))
#
# # 手动添加数据
# data_list.append(('济源市',5))
#
# # 创建地图
# map = Map()
# # 添加数据
# map.add('河南疫情分布',data_list,'河南')
# # 全局配置
# map.set_global_opts(
#     title_opts=TitleOpts(title='河南疫情地图'),
#     visualmap_opts=VisualMapOpts(
#         is_show=True,
#         is_piecewise=True,
#         pieces=[
#             {'min': 0, 'max': 100,'lable':'0~100','color':'white'},
#             {'min': 100, 'max': 1000,'lable':'0~100','color':'green'},
#             {'min': 1000, 'max': 10000,'lable':'0~100','color':'yellow'},
#             {'min': 10000, 'max': 100000,'lable':'0~100','color':'red'},
#
#         ]
#     )
# )
# map.render('河南疫情数据地图.html')




# # 基础柱状图 的开发
# from pyecharts.charts import Bar
# from pyecharts.options import LabelOpts
# # 构建柱状图对象
# bar = Bar()
# # 添加x轴数据
# bar.add_xaxis(['中国','美国','英国'])
# # 添加y轴数据
# bar.add_yaxis('GDP',[30,20,10],label_opts=LabelOpts(position='right'))
# # 反转xy轴
# bar.reversal_axis()
#
# # 绘图
# bar.render('基础柱状图.html')


# # 基础柱状图 的开发
# from pyecharts.charts import Bar, Timeline
# from pyecharts.options import LabelOpts
# from pyecharts.globals import ThemeType
# # 构建柱状图对象
# bar1 = Bar()
# bar2 = Bar()
# bar3 = Bar()
# # 添加x轴数据
# bar1.add_xaxis(['中国','美国','英国'])
# bar2.add_xaxis(['中国','美国','英国'])
# bar3.add_xaxis(['中国','美国','英国'])
# # 添加y轴数据
# bar1.add_yaxis('GDP',[30,20,10],label_opts=LabelOpts(position='right'))
# bar2.add_yaxis('GDP',[50,50,50],label_opts=LabelOpts(position='right'))
# bar3.add_yaxis('GDP',[70,60,60],label_opts=LabelOpts(position='right'))
# # 反转xy轴
# bar1.reversal_axis()
# bar2.reversal_axis()
# bar3.reversal_axis()
#
# # 构建时间线对象
# timeline = Timeline({'theme': ThemeType.LIGHT})
# # 在时间线内添加柱状图对象
# timeline.add(bar1,'点1')
# timeline.add(bar2,'点2')
# timeline.add(bar3,'点3')
#
# # 自动播放设置
# timeline.add_schema(
#     play_interval=1000, # 播放时间，单位毫秒
#     is_timeline_show=True,  # 是否显示时间线
#     is_auto_play=True,  # 是否自动部分
#     is_loop_play=True  # 是否循环播放
# )
#
# # 绘图
# timeline.render('基础柱状图.html')


# # 基础柱状图 的开发
# from pyecharts.charts import Bar, Timeline
# from pyecharts.globals import ThemeType
# from pyecharts.options import LabelOpts, TitleOpts
# import json
#
# # 读取数据文件
# f = open('E:/PyProject/资料/第1-12章资料/资料/可视化案例数据/动态柱状图数据/1960-2019全球GDP数据.csv','r',encoding='GB2312')
# data_lines = f.readlines()
# # 关闭文件
# f.close()
#
# # 处理数据
# data_lines.pop(0)
# data_dict = {}
# for line in data_lines:
#     year = int(line.split(',')[0])
#     country = line.split(',')[1]
#     gdp = float(line.split(',')[2])
#     try:
#         data_dict[year].append([country, gdp])
#     except KeyError:
#         data_dict[year] = []
#         data_dict[year].append([country, gdp])
#
# # 创建时间线对象
# timeline = Timeline({'theme': ThemeType.LIGHT})
# # 排序年份
# sorted_year_list = sorted(data_dict.keys())
# for year in sorted_year_list:
#     data_dict[year].sort(key=lambda x: x[1],reverse=True)
#     # 取出本年份gdp前八的国家
#     year_data = data_dict[year][0:8]
#     x_data = []
#     y_data = []
#     for country_gdp in year_data:
#         x_data.append(country_gdp[0])
#         y_data.append(country_gdp[1] / 100000000)
#
#     # 构建柱状图对象
#     bar = Bar()
#     x_data.reverse()
#     y_data.reverse()
#     # 添加x轴数据
#     bar.add_xaxis(x_data)
#     # 添加y轴数据
#     bar.add_yaxis('GDP(亿)',y_data,label_opts=LabelOpts(position='right'))
#     # 反转xy轴
#     bar.reversal_axis()
#     # 设置每一年的图表的标题
#     bar.set_global_opts(
#         title_opts=TitleOpts(title=f'{year}年全球前8GDP数据')
#     )
#     timeline.add(bar,str(year))
#
# # 自动播放设置
# timeline.add_schema(
#     play_interval=1000, # 播放时间，单位毫秒
#     is_timeline_show=True,  # 是否显示时间线
#     is_auto_play=True,  # 是否自动部分
#     is_loop_play=False  # 是否循环播放
# )
#
# # 绘图
# timeline.render('1960-2019全球GDP前8国家.html')


# 默写
from pyecharts.charts import Timeline, Bar
from pyecharts.globals import ThemeType
from pyecharts.options import LabelOpts, TitleOpts

f = open('E:/PyProject/资料/第1-12章资料/资料/可视化案例数据/动态柱状图数据/1960-2019全球GDP数据.csv','r',encoding='GB2312')
data_lines = f.readlines()
f.close()

data_lines.pop(0)
data_dict = {}
for line in data_lines:
    year = int(line.split(',')[0])
    country = line.split(',')[1]
    gdp = float(line.split(',')[2])
    try:
        data_dict[year].append([country,gdp])
    except KeyError:
        data_dict[year] = []
        data_dict[year].append([country,gdp])

timeline = Timeline({'theme': ThemeType.LIGHT})
sorted_year_list = sorted(data_dict.keys())
for year in sorted_year_list:
    data_dict[year].sort(key=lambda x: x[1],reverse=True)
    data_list = data_dict[year][0:8]
    x_data = []
    y_data = []
    for data in data_list:
        x_data.append(data[0])
        y_data.append(data[1] / 100000000)

    bar = Bar()
    x_data.reverse()
    y_data.reverse()

    bar.add_xaxis(x_data)
    bar.add_yaxis('GDP（亿）',y_data,label_opts=LabelOpts(position='right'))

    bar.reversal_axis()

    bar.set_global_opts(
        title_opts=TitleOpts(title=f'{year}年全球前8GDP数据')
    )
    timeline.add(bar,str(year))


# 自动播放设置
timeline.add_schema(
    play_interval=1000, # 播放时间，单位毫秒
    is_timeline_show=True,  # 是否显示时间线
    is_auto_play=True,  # 是否自动部分
    is_loop_play=False  # 是否循环播放
)

# 绘图
timeline.render('1960-2019全球GDP前8国家.html')
